package com.ninth.element.generated.number.property;

import com.ninth.element.generated.number.NumberStarterConstants;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * redis的自动配置
 *
 * @author LiYUJi
 **/
@Component
@ConfigurationProperties(prefix = NumberStarterConstants.NUMBER_REDIS_PREFIX)
public class RedisWithNumberProperty {

    /**
     * 是否启用RedisID，默认false，非必填
     */
    private boolean enable = Boolean.FALSE;
    /**
     * 应用名称 - 没有时获取spring的应用名称
     */
    private String appName;
    /**
     * redis服务器ip，非必填，不配置时取spring.redis.host
     */
    private String host = "127.0.0.1";
    /**
     * 端口 非必填，不配置时取spring.redis.port
     */
    private int port = 6379;
    /**
     * 密码 非必填，不配置时取spring.redis.password
     */
    private String password;
    /**
     * 非必填，配置时将使用redis集群，不配置则使用上面配置的redis单机
     */
    private String nodes;
    /**
     * redis使用的库序号 #非必填，默认为0，建议配置与项目应用使用的database配置不同的database区别开来进行隔离
     */
    private Integer database = 0;
    /**
     * redis的连接池设置，在从池中取出连接前是否进行检验,如果检验失败,则从池中去除连接并尝试取出另一个。
     * true为检查，false为不检查。设置为true时，当连接池中的连接全部被占后，导致后续操作，获取不到数据，
     * 这些程序会等待，直到超时或者获取到有效连接为主
     */
    private boolean testOnBorrow = false;
    /**
     * 如果为true，表示有一个idle object evitor线程对idle object进行扫描，如果validate失败，
     * 此object会被从pool中drop掉；这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义；
     */
    private boolean testWhileIdle = false;
    /**
     * 超时时间
     */
    private Long timeout = 2000L;

    public boolean isEnable() {
        return enable;
    }

    public void setEnable(boolean enable) {
        this.enable = enable;
    }

    public String getAppName() {
        return appName;
    }

    public void setAppName(String appName) {
        this.appName = appName;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getNodes() {
        return nodes;
    }

    public void setNodes(String nodes) {
        this.nodes = nodes;
    }

    public Integer getDatabase() {
        return database;
    }

    public void setDatabase(Integer database) {
        this.database = database;
    }

    public boolean getTestOnBorrow() {
        return testOnBorrow;
    }

    public void setTestOnBorrow(boolean testOnBorrow) {
        this.testOnBorrow = testOnBorrow;
    }

    public boolean getTestWhileIdle() {
        return testWhileIdle;
    }

    public void setTestWhileIdle(boolean testWhileIdle) {
        this.testWhileIdle = testWhileIdle;
    }

    public Long getTimeout() {
        return timeout;
    }

    public void setTimeout(Long timeout) {
        this.timeout = timeout;
    }
}
